package com.ruoyi.merchant.msg.Model;


import com.ruoyi.merchant.msg.app.AbstractAppMsg;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 20.白名单开关（下行协议号：BP84，响应：AP84）
 *  IWBP84,353456789012345,080835,1#
 *  IW：标识符
 * BP84 : 命令字符
 * 353456789012345:IMEI号，设备唯一ID
 * 080835 :指令流水号
 * 1: 表示白名单开，0 表示白名单关
 *
 */
@Slf4j
@Data
public class BP85 extends AbstractAppMsg
{
    /**
     * 数据起封包
     */
    public String headCode = "IW";
    /**
     * 协议号
     */
    public final  String funCode = "BP85";
    /**
     * IMEI
     */
    private String imei;
    /**
     * 指令流水号
     */
    private String serialNnumber;
    /**
     * 1: 表示闹钟总开关，1为开，0 为关
     */
    private String sw;
    /**
     * 闹钟集合
     */
    private List<Item> items;
    /**
     * 结尾封包
     */
    public String footCode = "#";


     public BP85(){}



    @Override
    public  String toString(){
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(this.headCode);
        stringBuffer.append(this.funCode);
        stringBuffer.append(",");
        stringBuffer.append(this.imei);
        stringBuffer.append(",");
        stringBuffer.append(this.serialNnumber);
        stringBuffer.append(",");
        stringBuffer.append(this.sw);
        stringBuffer.append(",");
        stringBuffer.append(this.items.size());
        stringBuffer.append(",");
        String str = items.stream().map(item -> {
            return item.getTime() + "," + item.getCycle() + "," + item.getSw() + "," + item.getType();
        }).collect(Collectors.joining("@"));
        stringBuffer.append(str);
        stringBuffer.append(this.footCode);
        return stringBuffer.toString();
    }


    /**
     * 0900 ,135,1,1，表示一组闹钟，0900表示早上09:00, 135表示周一周三周五，使用24小时制
     * 1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
     * 1表示吃药提醒
     * 2 表示喝水提醒
     * 3 表示久坐提醒
     * 多组闹钟之间用”@”符号分隔
     */
    @Data
    public static class Item{
        /**
         * 0900表示早上09:00
         */
         private String time;
        /**
         *135表示周一周三周五，使用24小时制
         */
        private String cycle;
        /**
         *  1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
         */
        private String sw;
        /**
         * 1表示吃药提醒
         * 2 表示喝水提醒
         * 3 表示久坐提醒
         */
        private String type;

    }

}
        



